package com.pacvue.handler;

import com.pacvue.exception.RateLimitException;

public interface RateLimiterAcquireTokenHandler {

    /**
     * 非阻塞式获取令牌，获取不到令牌直接返回false
     *
     * @param key 令牌key
     * @param capacity 令牌桶容量
     * @param rate 令牌生成速率（个/每秒）
     * @return
     */
    boolean tryAcquire(String key, int capacity, double rate);



    /**
     * 阻塞式令牌获取
     * @param key 令牌key
     * @param capacity 令牌桶容量
     * @param rate 令牌生成速率（个/每秒）
     * @param timeout 请求超时时间（秒）
     */
    void acquire(String key, int capacity, double rate, long timeout) throws RateLimitException;
}
